/**
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 * $Id$ VendorsBean.java
 * Universidad de los Andes (Bogotá - Colombia)
 * Departamento de Ingeniería de Sistemas y Computación
 * Licenciado bajo el esquema Academic Free License version 2.1
 *
 * Ejercicio: Muebles los Alpes
 * Autor: Camilo Alvarez
 * Autor: David Méndez
 * Autor: German Sotelo
 * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 */
package com.losalpes.catalogo.beans;

import com.losalpes.catalogo.entities.ExperienciaVendendor;
import com.losalpes.catalogo.entities.Vendedor;
import com.losalpes.catalogo.servicios.IVendorServicesLocal;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.context.FacesContext;

/**
 * Clase que se encarga de facilitar la administración de vendedores
 * @author Camilo Alvarez
 * @author David Méndez
 * @author German Sotelo
 */
public class VendorsBean {

   // ----------------------------------------------
   // Atributos
   // ----------------------------------------------

    /**
     * Relación con la interfaz que provee los servicios necesarios relacionados con los vendedores.
     */
    @EJB
    private IVendorServicesLocal vendorServices;

    /**
     * Identificador único del vendedor.
     */
    private String id;

    /**
     * Experiencia con la que cuenta el vendedor.
     */
    private ExperienciaVendendor experienciaVendendor = new ExperienciaVendendor();

    /**
     * Objeto que referencia al vendedor actual del sistema.
     */
    private Vendedor vendedor;

   // ----------------------------------------------
   // Constructor
   // ----------------------------------------------

    /**
     * Constructor por defecto de la clase.
     */
    public VendorsBean() {

    }

   // ----------------------------------------------
   // Métodos
   // ----------------------------------------------

    /**
     * Inicializa los atributos de la clase.
     * Método que se ejecuta justo después de ejecutar el constructor de la clase.
     */
    @PostConstruct
    public void init() {
        vendedor = vendorServices.getVendedor();
    }

    /**
     * Se crea un nuevo vendedor en el sistema.
     * @return resultado de la operacion.
     */
    public String newVendor() {
        vendedor = vendorServices.newVendedor();
        return null;
    }

    /**
     * Actualiza el empleado actual en el sistema
     * @return
     */
    public String createOrUpdate(){
        vendorServices.setVendedor(vendedor);
        vendedor = vendorServices.createOrUpdate();
        destroyBean();
        return null;
    }

    /**
     * Elimina a un empleado del sistema dado el id del mismo.
     * @return resultado de la operacion.
     */
    public String delete() {
        Vendedor v = vendorServices.findByIdentificacion(id);
        vendorServices.setVendedor(v);
        vendorServices.delete();
        destroyBean();
        return null;
    }

    /**
     * Elimina la instancia actual del bean. 
     */
    public void destroyBean() {
        FacesContext.getCurrentInstance().getExternalContext().getSessionMap().remove("VendorsBean");
    }

    /**
     * Retorna el vendedor actual del sistema.
     * @return vendedor. Vendedor actual del sistema.
     */
    public Vendedor getVendedor() {
        return vendedor;
    }

    /**
     * Agrega un item de experiencia al vendedor actual del sistema.
     * @return resultado de la operación.
     */
    public String addExperience() {
        vendedor.getExperiencia().add(experienciaVendendor);
        return null;
    }

    /**
     * Retorna todos los vendedores que se encuentran actualmente en el sistema.
     * @return vendedores. Lista con todos los vendedores que se encuentran actualmente en el sistema.
     */
    public List<Vendedor> getAllVendors() {
        return vendorServices.findAll();
    }

    /**
     * Asigna al vendedor actual el resultado de una consulta por identificador en el sistema.
     * @return resultado de la operacion.
     */
    public String findById() {
        vendedor = vendorServices.findByIdentificacion(id);
        return null;
    }

    /**
     * Retorna la experiencia del vendedor.
     * @return experienciaVendedor. Experiencia del vendedor.
     */
    public ExperienciaVendendor getExperienciaVendendor() {
        return experienciaVendendor;
    }

    /**
     * Permite asignar un nuevo valor a la experiencia del vendedor.
     * @param experienciaVendendor. Nueva experiencia.
     */
    public void setExperienciaVendendor(ExperienciaVendendor experienciaVendendor) {
        this.experienciaVendendor = experienciaVendendor;
    }

    /**
     * Retorna el identificador unico del vendedor.
     * @return id. Identificador unico del vendedor.
     */
    public String getId() {
        return id;
    }

    /**
     * Permite asignar un nuevo valor al identificador unico del vendedor.
     * @param id. Nuevo identificador.
     */
    public void setId(String id) {
        this.id = id;
    }
}